package com.结构型模式.代理模式.动态代理.基于JDK实现;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/** 目标类的代理类
 * @author chenhs
 * @date 2020/10/13
 */
public class SubjectImplProxy implements InvocationHandler {
	private ISubject subject;
	public SubjectImplProxy(ISubject subject){
	this.subject =subject;
	}
	/*method  反射机制调用真实主题中的真实方法。
	* args 真实主题中的方法中的参数
	* proxy 不知道。
	* invoke 真实主题方法的返回值，如果没有级就返回null.
	* */
	@Override
	public Object invoke(Object proxy, Method method, Object[] aa) throws Throwable {
		System.out.println("前置真强。");
		Object invoke = method.invoke(subject, aa);
		System.out.println("后置真强");
		System.out.println("返回值:"+invoke);
		for (int i = 0; i < aa.length; i++) {
			System.out.println("参数："+aa[i].toString());
		}
		System.out.println("方法："+method.getName());
		return invoke;
	}
}
